//>>built
define("dojox/grid/enhanced/plugins/Printer", ["dojo/_base/declare", "dojo/_base/html", "dojo/_base/Deferred", "dojo/_base/lang", "dojo/_base/sniff", "dojo/_base/xhr", "dojo/_base/array", "dojo/query", "dojo/DeferredList", "../_Plugin", "../../EnhancedGrid", "./exporter/TableWriter"], function (_1, _2, _3, _4, _5, _6, _7, _8, _9, _a, _b, _c) {
    var _d = _1("dojox.grid.enhanced.plugins.Printer", _a, {name: "printer", constructor: function (_e) {
        this.grid = _e;
        this._mixinGrid(_e);
        _e.setExportFormatter(function (_f, _10, _11, _12) {
            return _10.format(_11, _12);
        });
    }, _mixinGrid                                               : function () {
        var g = this.grid;
        g.printGrid = _4.hitch(this, this.printGrid);
        g.printSelected = _4.hitch(this, this.printSelected);
        g.exportToHTML = _4.hitch(this, this.exportToHTML);
        g.exportSelectedToHTML = _4.hitch(this, this.exportSelectedToHTML);
        g.normalizePrintedGrid = _4.hitch(this, this.normalizeRowHeight);
    }, printGrid                                                : function (_13) {
        this.exportToHTML(_13, _4.hitch(this, this._print));
    }, printSelected                                            : function (_14) {
        this.exportSelectedToHTML(_14, _4.hitch(this, this._print));
    }, exportToHTML                                             : function (_15, _16) {
        _15 = this._formalizeArgs(_15);
        var _17 = this;
        this.grid.exportGrid("table", _15, function (str) {
            _17._wrapHTML(_15.title, _15.cssFiles, _15.titleInBody + str).then(_16);
        });
    }, exportSelectedToHTML                                     : function (_18, _19) {
        _18 = this._formalizeArgs(_18);
        var _1a = this;
        this.grid.exportSelected("table", _18.writerArgs, function (str) {
            _1a._wrapHTML(_18.title, _18.cssFiles, _18.titleInBody + str).then(_19);
        });
    }, _loadCSSFiles                                            : function (_1b) {
        var dl = _7.map(_1b, function (_1c) {
            _1c = _4.trim(_1c);
            if (_1c.substring(_1c.length - 4).toLowerCase() === ".css") {
                return _6.get({url: _1c});
            } else {
                var d = new _3();
                d.callback(_1c);
                return d;
            }
        });
        return _9.prototype.gatherResults(dl);
    }, _print                                                   : function (_1d) {
        var win, _1e = this, _1f = function (w) {
            var doc = w.document;
            doc.open();
            doc.write(_1d);
            doc.close();
            _1e.normalizeRowHeight(doc);
        };
        if (!window.print) {
            return;
        } else {
            if (_5("chrome") || _5("opera")) {
                win = window.open("javascript: ''", "", "status=0,menubar=0,location=0,toolbar=0,width=1,height=1,resizable=0,scrollbars=0");
                _1f(win);
                win.print();
                win.close();
            } else {
                var fn = this._printFrame, dn = this.grid.domNode;
                if (!fn) {
                    var _20 = dn.id + "_print_frame";
                    if (!(fn = _2.byId(_20))) {
                        fn = _2.create("iframe");
                        fn.id = _20;
                        fn.frameBorder = 0;
                        _2.style(fn, {width: "1px", height: "1px", position: "absolute", right: 0, bottom: 0, border: "none", overflow: "hidden"});
                        if (!_5("ie")) {
                            _2.style(fn, "visibility", "hidden");
                        }
                        dn.appendChild(fn);
                    }
                    this._printFrame = fn;
                }
                win = fn.contentWindow;
                _1f(win);
                win.focus();
                win.print();
            }
        }
    }, _wrapHTML                                                : function (_21, _22, _23) {
        return this._loadCSSFiles(_22).then(function (_24) {
            var i, sb = ["<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">", "<html ", _2._isBodyLtr() ? "" : "dir=\"rtl\"", "><head><title>", _21, "</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></meta>"];
            for (i = 0; i < _24.length; ++i) {
                sb.push("<style type=\"text/css\">", _24[i], "</style>");
            }
            sb.push("</head>");
            if (_23.search(/^\s*<body/i) < 0) {
                _23 = "<body>" + _23 + "</body>";
            }
            sb.push(_23, "</html>");
            return sb.join("");
        });
    }, normalizeRowHeight                                       : function (doc) {
        var _25 = _8(".grid_view", doc.body);
        var _26 = _7.map(_25, function (_27) {
            return _8(".grid_header", _27)[0];
        });
        var _28 = _7.map(_25, function (_29) {
            return _8(".grid_row", _29);
        });
        var _2a = _28[0].length;
        var i, v, h, _2b = 0;
        for (v = _25.length - 1; v >= 0; --v) {
            h = _2.contentBox(_26[v]).h;
            if (h > _2b) {
                _2b = h;
            }
        }
        for (v = _25.length - 1; v >= 0; --v) {
            _2.style(_26[v], "height", _2b + "px");
        }
        for (i = 0; i < _2a; ++i) {
            _2b = 0;
            for (v = _25.length - 1; v >= 0; --v) {
                h = _2.contentBox(_28[v][i]).h;
                if (h > _2b) {
                    _2b = h;
                }
            }
            for (v = _25.length - 1; v >= 0; --v) {
                _2.style(_28[v][i], "height", _2b + "px");
            }
        }
        var _2c = 0, ltr = _2._isBodyLtr();
        for (v = 0; v < _25.length; ++v) {
            _2.style(_25[v], ltr ? "left" : "right", _2c + "px");
            _2c += _2.marginBox(_25[v]).w;
        }
    }, _formalizeArgs                                           : function (_2d) {
        _2d = (_2d && _4.isObject(_2d)) ? _2d : {};
        _2d.title = String(_2d.title) || "";
        if (!_4.isArray(_2d.cssFiles)) {
            _2d.cssFiles = [_2d.cssFiles];
        }
        _2d.titleInBody = _2d.title ? ["<h1>", _2d.title, "</h1>"].join("") : "";
        return _2d;
    }});
    _b.registerPlugin(_d, {"dependency": ["exporter"]});
    return _d;
});
